/*
 * DynamicSerializer.h
 *
 *  Created on: Nov 28, 2012
 *      Author: m
 */

#ifndef DYNAMICSERIALIZER_H_
#define DYNAMICSERIALIZER_H_

#include <memory>
#include <cstring>
#include "Serializer.h"

namespace physical
{

/**
 *  Interfáz para serializadores
 *
 * @deprecated DEPRECATED! Esta clase es obsoleta, solo se
 *              deja por compatibilidad, porque el árbol la
 *              utiliza.
 *
 * TODO: Refactorizar esta clase y mergearla con los otros
 *        serializadores
 */
template <typename T> class DynamicSerializer : public Serializer<T>
{
public:

    typedef std::shared_ptr<T> _T_ptr;  // Puntero (dinámico) al tipo T
    typedef T _T;                       // El tipo T

public:

    /**
     * Destructor
     */
    virtual ~DynamicSerializer(){};

    /*
     * Interfáz dinámica : Deprecated!
     *
     * Se deja por el momento por compatibilidad
     */

    /**
     * Deprecated!
     *
     * @param element
     * @param block
     * @return
     */
    virtual size_t serialize( const _T_ptr &element, byteStream block ) = 0;

    /**
     * Deprecated!
     *
     * @param block
     * @param elementPtr
     * @return
     */
    virtual size_t deserialize( const byteStream block, _T_ptr &elementPtr ) = 0;

    /**
     * Deprecated!
     *
     * @param element
     * @return
     */
    virtual size_t getSize( const _T_ptr &element ) = 0;

};

} /* namespace physical */
#endif /* DYNAMICSERIALIZER_H_ */
